import element.base.Word;
import element.synt.Program;
import symbol.astPreprocessContext;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class Compiler {
    public static void main(String[] args) throws IOException {
        WindowsFrame windowsFrame = new WindowsFrame();
        windowsFrame.show();

//        File inFile = new File("testfile.txt");
//        File lexerFile = new File("lexer.txt");
//        File parserFile = new File("parser.txt");
//        File astFile = new File("ast.json");
//
//        FileDeal fileDeal = new FileDeal(inFile);
//        try {
//            fileDeal.readFile();
//        } catch (IOException e) {
//            System.out.println("IO error");
//        }
//        String procedure = fileDeal.getUnionLines();
//
//        //词法分析
//        Lexer lexer = new Lexer(procedure);
//        lexer.Execute();
//        ArrayList<Word> words = lexer.getWords();
//
//        FileWriter lexerWriter = new FileWriter(lexerFile);
//
//        for (Word word: words) {
//            lexerWriter.write(word.toString() + "\n");
//        }
//
//        lexerWriter.flush();
//        lexerWriter.close();
//
//        Parser parser = new Parser(words);
//        Program program = (Program) parser.Execute();
//
//        FileWriter parserWriter = new FileWriter(parserFile);
//        parserWriter.write(program.toTreeString(0));
//
//        parserWriter.flush();
//        parserWriter.close();
//
//        //语义分析
//        ast.Program programAst = (ast.Program) program.toAst();
//        
//        astPreprocessContext.getContext();
//        programAst.preprocess(null);
//        System.out.println(astPreprocessContext.toDebugString());
//        System.out.println(programAst.toString());
//        FileWriter writer;
//        writer = new FileWriter("./c_code.c");
//        writer.write(programAst.toString());
//        writer.flush();
//        writer.close();
//
//        FileWriter astWriter = new FileWriter(astFile);
//        astWriter.write(programAst.toJsonString());
//
//        astWriter.flush();
//        astWriter.close();
    }
}
